#include <bits/stdc++.h>
#define int long long 
using namespace std;
		
int dp[20][2][10][10][10][10][2]; // pos, limit, prev1, prev2, prev3, prev4, val
int digit[20];
int cnt;
void init(){
	memset(dp, -1, sizeof(dp));
	memset(digit, 0, sizeof(digit));
	cnt=0;
}
		
int dfs(int pos, int limit ,int pre1, int pre2, int pre3, int pre4, int val){ // 为什么要有 val ? 因为 并不是递归到结尾的都是满足条件的
	if ((pre1==2&&pre2==0&&pre3==2&&pre4==3)||(pre3==1&&pre4==4)) {
		val=1;
	}
	if (pos==0) { 
		return val;
	}
	if (dp[pos][limit][pre1][pre2][pre3][pre4][val] != -1 && !limit) {
		return dp[pos][limit][pre1][pre2][pre3][pre4][val];
	}
	
	int up=limit?digit[pos]:9;
	int res=0;
	for (int i=0;i<=up;i++) {
		res += dfs(pos-1, limit&&(i==up), pre2, pre3, pre4, i, val);
	}
	if (!limit) {
		dp[pos][limit][pre1][pre2][pre3][pre4][val]=res;
	}
	
	return res;
	
}
		
		
int cal(int x){
	while(x){
		digit[++cnt]=x%10;
		x/=10;
	}
	return dfs(cnt, 1, 0, 0, 0, 0, 0);
}
		
void solve(){
	int l,r;
	cin>>l>>r;
	init();
	int v1 = cal(r);
	init();
	int v2 = cal(l-1);
	cout <<v1-v2<<'\n';
}
		
signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
